package org.inspiration.dudu.content.service;

import org.inspiration.dudu.content.model.dto.CommentDTO;
import org.inspiration.dudu.content.model.entity.CommentEntity;
import org.inspiration.dudu.content.model.vo.CommentVO;

import java.util.List;

/**
 * 评论服务接口，提供对评论的基本操作。
 */
public interface CommentService {
    /**
     * 创建评论
     * 
     * @param commentEntity 评论实体
     */
    void createComment(CommentEntity commentEntity);

    /**
     * 将评论实体转换为视图对象
     * 
     * @param commentEntity 评论实体
     * @return 评论视图对象
     */
    CommentVO transToVO(CommentEntity commentEntity);

    /**
     * 根据父级ID以升序获取评论
     * 
     * @param parentId 父级ID
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 评论视图对象列表
     */
    List<CommentVO> getCommentsByParentIdOrderByASC(String parentId, Integer pageNum, Integer pageSize);

    /**
     * 根据父级ID以降序获取评论
     * 
     * @param parentId 父级ID
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 评论视图对象列表
     */
    List<CommentVO> getCommentsByParentIdOrderByDESC(String parentId, Integer pageNum, Integer pageSize);

    /**
     * 增加内容的点赞数
     * 
     * @param contentId 内容ID
     */
    void increaseLikeCount(String contentId);

    /**
     * 减少内容的点赞数
     * 
     * @param contentId 内容ID
     */
    void decreaseLikeCount(String contentId);

    /**
     * 根据内容ID获取用户ID
     * 
     * @param contentId 内容ID
     * @return 用户ID
     */
    Long getUserIdByContentId(String contentId);

    /**
     * 根据内容ID获取评论实体
     * 
     * @param contentId 内容ID
     * @return 评论实体
     */
    CommentEntity getCommentByContentId(String contentId);

    /**
     * 将评论DTO转换为评论实体
     * 
     * @param commentDTO 评论DTO
     * @param contentFilePath 内容文件路径
     * @param uuid 唯一标识符
     * @return 评论实体
     */
    CommentEntity transToEntity(CommentDTO commentDTO, String contentFilePath, String uuid);

    /**
     * 增加内容的评论数
     * 
     * @param contentId 内容ID
     */
    void increaseCommentCount(String contentId);



    /**
     * 将评论标记为已读
     */
    void markAsRead(CommentDTO commentDTO);

    List<CommentEntity> getReceiveCommentsByUserIdOrderByDESC(Long userId, Integer pageNum, Integer pageSize);
}
